package ml

import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.{SparkConf, SparkContext}

object DataType {
  def main(args: Array[String]): Unit = {
    val context = new SparkContext(new SparkConf().setMaster("local[*]").setAppName("stream"))

    /**
     * 向量,有方向，有大小
     * 再机器学习中由于表示x(特征向量)
     */

    //稠密向量
    val dense = Vectors.dense(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0)
    println(dense)

    //稀疏向量
    //稀疏向量只保存不为0的值
    //如果数据中存在大量的0, 稀疏向量占用的空间会比稠密向量小
    val sparse = Vectors.sparse(20, Array(0, 1, 2, 3, 11), Array(1, 1, 1, 1, 1))
    println(sparse)

    //相互转换
    println(sparse.toDense)
    println(dense.toSparse)

    /**
     * LabeledPoint, 由y和x组成。代表一条数据
     */

    val pos: LabeledPoint = LabeledPoint(1.0, Vectors.dense(1.0, 2.0, 4.0))
    println(pos)

  }

}
